<h2>命名规范</h2>
<p>模型名称为数据表名名称，下划线变为大写，如 <code>system_config</code> 表模型名则为 <code>SystemConfigModel.php</code>，模型中的方法使用动词+名次命名，以下为常用命名名称 </p>
<pre>
loadList      获取列表
countList     数据列表数量
getInfo       获取信息
getWhereInfo  获取条件信息
addData       添加数据
saveData      更新数据
delData       删除数据
where         条件
limit         条数
order         排序
</pre>
<h2>基础模型</h2>
<p>任何需要数据库操作都必须继承 <code>\app\base\model\BaseModel</code> 模型，<code>Base</code> 模型继承了框架中的模型。系统会自动设置当前模型名称为表名，一般无需再次设置。使用模型方法不需要填写表前缀，表前缀在系统配置项置顶。</p>
<h3><b>设置表名</b></h3>
<pre>
/**
* 设置表名 - 用于方法内操作
* @param string $table 表名不含前缀
*/
$this->setTable($table = null);
</pre>
<h3><b>数据查询</b></h3>
<pre>
//查询多条数据
$this->where(array())->limit(10)->select();
//查询单条数据
$this->where(array())->find();
//多表查询
$this->table('表名 as A')
        ->join('{pre}表名2 as B ON A.table_id = B.table_id','inner')
        ->field('A.*,B.name')
        ->where($where)
        ->limit($limit)
        ->select();
</pre>
<h3><b>数据统计</b></h3>
<pre>
//统计表数据
$this->where(array())->count();
//统计字段总和
$this->where(array())->sum($field);
</pre>
<h3><b>数据插入</b></h3>
<p>成功返回数据id，失败返回flase，自动过滤多余字段</p>
<pre>
$this->add($data);
</pre>
<h3><b>数据更新</b></h3>
<p>更新成功返回true，否则返回false，需要使用绝对等于判断，自动过滤多余字段</p>
<pre>
$this->where($where)->save($data);
</pre>
<h3><b>数据删除</b></h3>
<p>删除成功返回true，否则返回false，需要使用绝对等于判断</p>
<pre>
$this->where($where)->delete();
</pre>
<h3><b>递增递减字段</b></h3>
<pre>
$this->where($where)->setInc($key, $value = 1);
$this->where($where)->setDec($key, $value = 1);
</pre>
<h3><b>执行原生SQL查询与接入(见CANPHP3手册)</b></h3>
<pre>
$this->query($sql,$params);
$this->execute($sql,$params);
</pre>
<h3><b>数据验证</b></h3>
<p>模型中指定验证方法，thinkphp然后使用高级插入、编辑方法</p>
<p>验证参数为 <code>字段名, 验证规则, 验证提示, 验证种类，验证时机</code></p>
<pre>
//验证示例
protected $_validate = array(
    array('group_id','number', '用户组未选择', 1 ,'regex', 3),
);
</pre>
<h4>验证字段</h4>
<p>表单提交字段名称</p>
<h4>验证规则</h4>
<p>配合验证种类，默认为正则，可以直接填写正则验证，也可以使用内置验证，包括：require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字。</p>
<h4>验证提示</h4>
<p>验证失败的返回错误信息</p>
<h4>验证种类</h4>
<div class="dux-table">
<table class="uk-table ">
    <thead>
        <tr>
            <th width="80">种类</th>
            <th>说明</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>regex</td>
            <td>正则验证，默认规则</td>
        </tr>
        <tr>
            <td>function</td>
            <td>函数验证，规则填写函数名</td>
        </tr>
        <tr>
            <td>callback</td>
            <td>回调验证，规则填写当前模型方法</td>
        </tr>
        <tr>
            <td>confirm</td>
            <td>判断字段相等，规则填写验证字段名</td>
        </tr>
        <tr>
            <td>length</td>
            <td>长度范围，规则如 <code>1,10</code></td>
        </tr>
        <tr>
            <td>unique</td>
            <td>唯一数据验证</td>
        </tr>
    </tbody>
</table>
</div>
<h4>验证时机</h4>
<p>1增加数据，2编辑数据，3全部(默认)</p>
<h3><b>数据格式化</b></h3>
<p>模型中指定格式化方法，用于数据格式化与过滤多余字段</p>
<p>格式化参数为 <code>字段名, 规则名, 格式化时机, 格式化种类</code></p>
<pre>
//格式化示例
protected $_auto = array (
        array('username','htmlspecialchars',3,'function'),
);
</pre>
<h4>字段名</h4>
<p>表单提交字段名称</p>
<h4>规则名</h4>
<p>配合格式化种类，默认为字符串</p>
<h4>格式化时机</h4>
<p>1增加数据，2编辑数据，3全部(默认)</p>
<h4>格式化种类</h4>
<div class="dux-table">
<table class="uk-table ">
    <thead>
        <tr>
            <th width="80">种类</th>
            <th>说明</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>function</td>
            <td>函数格式化</td>
        </tr>
        <tr>
            <td>callback</td>
            <td>回调格式化，规则填写当前模型方法</td>
        </tr>
        <tr>
            <td>field</td>
            <td>字段填充，规则填写字段名，将目标字段填充到当前字段</td>
        </tr>
        <tr>
            <td>ignore</td>
            <td>为空则忽略该字段入库</td>
        </tr>
        <tr>
            <td>string</td>
            <td>为空填充字符串</td>
        </tr>
    </tbody>
</table>
</div>
<h3><b>数据创建</b></h3>
<p>用于入库时自动获取表单内容进行数据验证、格式化、过滤等操作，返回最终的处理数据。</p>
<pre>
/**
* 数据创建，读取$_auto与$_validate定义进行数据创建
* @var array 返回最终数据
*/
$this->create();
</pre>
<P>您也可以使用自定义的验证规则与完成规则进行创建</P>
<pre>
$this->validateData(array())->autoData(array())->create();
</pre>
<P>创建数据后您可以直接使用<code>add</code>方法与<code>edit</code>方法进行数据添加与更新，无需指定数据，您也可以获取到<code>create</code>的数据后再提交给添加更新方法。</P>

<h2>增删查改封装使用</h2>
<p><code>Base</code>模型中封装了增删查改的常用控制器代码，只需要定义少量代码即可生成控制器。</p>
<pre>
/**
* 获取列表
* @return array
*/
public function loadList($where = array(), $limit = 0, $order)

/**
* 获取数量
* @return array
*/
public function countList($where = array())

/**
* 获取信息
* @return array
*/
public function getInfo($id)

/**
* 获取信息
* @return array
*/
public function getWhereInfo($where = array())

/**
* 保存信息
* @return array
*/
public function saveData($type = 'add', $data = array())

/**
* 删除信息
* @return array
*/
public function delData($id)
</pre>
<h3>保存信息参数</h3>
<pre>
/**
* 保存前操作
* @return array
*/
protected function _saveBefore ($data)

/**
* 添加前操作
* @return array
*/
protected function _addBefore ($data)


/**
* 编辑前操作
* @return array
*/
protected function _editBefore ($data)

/**
* 保存后操作
* @return array
*/
protected function _saveAfter ($type, $data)
</pre>

<h3>删除信息参数</h3>
<pre>
/**
* 删除前操作
* @return void
*/
protected function _delBefore ($id)

/**
* 删除后操作
* @return array
*/
protected function _delAfter ($id)
</pre>


<h2>原始模型方法</h2>
<pre>
&lt;?php
namespace app\system\model;
use app\base\model\BaseModel;
/**
 * 示例模型
 */
class DemoModel extends BaseModel {

    //完成
    protected $_auto = array (
     );
    //验证
    protected $_validate = array(
    );

    /**
     * 获取列表
     * @return array 列表
     */
    public function loadList($where = array(), $limit = 0){
        return $this->where($where)->limit($limit)->select();
    }

    /**
     * 获取数量
     * @return int 数量
     */
    public function countList($where = array()){

        return $this->where($where)->count();
    }

    /**
     * 获取信息
     * @param int $id ID
     * @return array 信息
     */
    public function getInfo($id = 1)
    {
        $map = array();
        $map['id'] = $id;
        return $this->getWhereInfo($map);
    }

    /**
     * 获取信息
     * @param array $where 条件
     * @return array 信息
     */
    public function getWhereInfo($where)
    {
        return $this->where($where)->find();
    }

    /**
     * 更新信息
     * @param string $type 更新类型
     * @return bool 更新状态
     */
    public function saveData($type = 'add'){
        $data = $this->create();
        if(!$data){
            return false;
        }
        if($type == 'add'){
            return $this->add();
        }
        if($type == 'edit'){
            if(empty($data['id'])){
                return false;
            }
            $status = $this->save($data);
            if($status === false){
                return false;
            }
            return true;
        }
        return false;
    }
    
    /**
     * 删除信息
     * @param int $id ID
     * @return bool 删除状态
     */
    public function delData($id)
    {
        $map = array();
        $map['id'] = $id;
        return $this->where($map)->delete();
    }
}
</pre>
<script>
    Do.ready('pre', function () {
        $("pre").addClass("prettyprint");
        prettyPrint();
    });
</script>
